package stringtest;

import org.junit.Test;

/**
 * @Author: fxy
 * @Date: 2022/02/22/8:33
 * @Description:
 */
public class StringIntern1 {
    /*如何保证声明的引用一定指向常量池的字符串
    * 1、String s = "aaa";
    * 2、获取intern方法返回的对象*/
    /*public static void main(String[] args) {
        String s = new String("1");
        *//**
         * 常量池 : "1"
         * 堆 ：“1”
         * 常量池和堆里面的“1”的地址不一样，这个“1”先出现在常量池中
         *//*
        s.intern();
        String s2 = "1";
        System.out.println(s==s2);


        String s3 = new String("1")+new String("1");
        System.out.println("s3:"+System.identityHashCode(s3));
        *//**
         * 常量池 ：“1”
         * 堆 ：“1” “1” “11” “11”
         *//*
        s3.intern();
        //"11".intern();
        *//**
         * 常量池 ：“1”  "11"
         * 常量池记录了一个引用，这个引用指向堆里面的那个String的11   另外还有一个StringBuilder的11
         * 这个“11”先出现在堆中
         *//*
        String s4 = "11";
        System.out.println("s4:"+System.identityHashCode(s4));
        *//**
         * s4指向堆里面的那个“11”
         *//*
        System.out.println(s3==s4);//true
    }*/

    /**
     *
     */
    @Test
    public void t1(){
        String s = new String("1");
        s.intern();
        String s2 = "1";
        System.out.println(s==s2);

        String s3 = new String("1")+new String("1");
        s3.intern();
        String s4 = "11";
        System.out.println(s3==s4);
    }

    public static void main(String[] args) {
        String s = new String("1");
        s.intern();
        String s2 = "1";
        System.out.println(s==s2);

        String s3 = new String("1")+new String("1");
        s3.intern();
        String s4 = "11";
        System.out.println(s3==s4);
    }

}
